
package com.hlkj.pay.service.order.impl;
/*
 * Hlpay-Plus aggregate payment system.
 * Copyright (c) 2024-2025 Hlpay Team Copyright has the right of final interpretation.
 */

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.hlkj.framework.common.pojo.PageResult;
import com.hlkj.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.hlkj.pay.dto.order.NotifyOrderQueryDto;
import com.hlkj.pay.infrastructure.mapper.order.OrderNotifyMapper;
import com.hlkj.pay.infrastructure.model.order.OrderNotifyDO;
import com.hlkj.pay.service.CommonSnFilterService;
import com.hlkj.pay.service.order.IOrderNotifyService;

import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;

/**
 * @author HlpayTeam
 * @date 2024/11/07 10:46
 */
@Service
@Slf4j
@RequiredArgsConstructor
public class OrderNotifyServiceImpl extends CommonSnFilterService implements IOrderNotifyService {

    private final OrderNotifyMapper orderNotifyMapper;

    @Override
    public void addOrderNotify(OrderNotifyDO orderNotify) {
        orderNotifyMapper.insert(orderNotify);
    }

    @Override
    public PageResult<OrderNotifyDO> queryPage(NotifyOrderQueryDto notifyOrderQueryDto) {
        notifyOrderQueryDto.setSortingFields("id");
        return orderNotifyMapper.selectPage(notifyOrderQueryDto, buildWrapper(notifyOrderQueryDto));
    }

    @Override
    public OrderNotifyDO queryDetail(Long id) {
        return orderNotifyMapper.selectById(id);
    }

    @Override
    public OrderNotifyDO queryDetail(String payOrderNo, Integer notifyType) {
        NotifyOrderQueryDto notifyOrderQueryDto=new NotifyOrderQueryDto();
        notifyOrderQueryDto.setPayOrderNo(payOrderNo);
        notifyOrderQueryDto.setNotifyType(notifyType);
        return orderNotifyMapper.selectOne(buildWrapper(notifyOrderQueryDto));
    }

    @Override
    public void updateOrderNotify(OrderNotifyDO notifyDO) {
        orderNotifyMapper.updateById(notifyDO);
    }

    /**
     * 查询条件封装
     *
     * @param notifyOrderQueryDto
     * @return
     */
    LambdaQueryWrapper<OrderNotifyDO> buildWrapper(NotifyOrderQueryDto notifyOrderQueryDto) {
        filterSn(notifyOrderQueryDto);
        LambdaQueryWrapperX<OrderNotifyDO> queryWrapper = new LambdaQueryWrapperX<>();
        queryWrapper.eqIfPresent(OrderNotifyDO::getPayOrderNo, notifyOrderQueryDto.getPayOrderNo());
        queryWrapper.eqIfPresent(OrderNotifyDO::getMchOrderNo, notifyOrderQueryDto.getMchOrderNo());
        queryWrapper.eqIfPresent(OrderNotifyDO::getNotifyState, notifyOrderQueryDto.getNotifyState());
        queryWrapper.eqIfPresent(OrderNotifyDO::getNotifyType, notifyOrderQueryDto.getNotifyType());
        queryWrapper.eqIfPresent(OrderNotifyDO::getSn, notifyOrderQueryDto.getSn());
        queryWrapper.inIfPresent(OrderNotifyDO::getSn, notifyOrderQueryDto.getSnList());
        queryWrapper.geIfPresent(OrderNotifyDO::getCreateTime, notifyOrderQueryDto.getStartQueryTime());
        queryWrapper.leIfPresent(OrderNotifyDO::getCreateTime, notifyOrderQueryDto.getEndQueryTime());
        queryWrapper.likeIfPresent(OrderNotifyDO::getAppId, notifyOrderQueryDto.getAppId());
        return queryWrapper;
    }
}
